package DCSource.ConfigManager;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import DCSource.Archive.Zipfile;
import DCSource.Archive.toZipFile;

public class Database {
	public Database(){}
	ArrayList<Table> list = new ArrayList<Table>();
	public void add(Table mg, boolean overwrite){
		boolean found = false;
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().getName().equals(mg.getName().getName())){
				found = true;
				if (overwrite==true){
					list.set(I, mg);
				}
			}
		}
		if (found==false){
			list.add(mg);
		}
	}
	public void add(Table[] mgs,boolean overwrite){
		for (int I=0;I<mgs.length;I++){
			Table mg = mgs[I];
			boolean found = false;
			for (int I2=0;I2<list.size();I2++){
				if (list.get(I2).getName().getName().equals(mg.getName().getName())){
					found = true;
					if (overwrite==true){
						list.set(I2, mg);
					}
				}
			}
			if (found==false){
				list.add(mg);
			}
		}
	}
	public void rev(Table mg){
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().equals(mg.getName())){
				list.remove(I);
				I--;
			}
		}
	}
	public void rev(String mg){
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().equals(mg)){
				list.remove(I);
				I--;
			}
		}
	}
	public void rev(int dex){
		if (dex>-1&dex<list.size()){
			list.remove(dex);
		}
	}
	public Table get(String mg){
		Table returning=new Table("");
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().getName().equals(mg)){
				returning = list.get(I);
			}
		}
		return returning;
	}
	public Table get(Table mg){
		Table returning=new Table("");
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().getName().equals(mg.getName().getName())){
				returning = list.get(I);
			}
		}
		return returning;
	}
	public Table[] getall(){
		return list.toArray(new Table[list.size()]);
	}
	public Table get(int dex){
		Table returning=new Table("");
		if (dex>-1&dex<list.size()){
			returning = list.get(dex);
		}
		return returning;
	}
	public int count(){
		return list.size();
	}
	public boolean existTable(Table mg){
		boolean returning=false;
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().equals(mg.getName())){
				returning=true;
			}
		}
		return returning;
	}
	public boolean existTable(String mg){
		boolean returning=false;
		for (int I=0;I<list.size();I++){
			if (list.get(I).getName().getName().equals(mg)){
				returning=true;
			}
		}
		return returning;
	}
	public void clear(){
		list.clear();
	}
	public void save(String file){
		ArrayList<toZipFile> tosave = new ArrayList<toZipFile>();
		for (int I=0;I<list.size();I++){
			tosave.add(new toZipFile(list.get(I).getName().getName(),list.get(I).getSource().getBytes()));
		}
		Zipfile zip = new Zipfile(file);
		if (!zip.CanWork()){
			zip.createClearZip(file);
			zip = new Zipfile(file);
		}
		zip.packFiles(tosave, 9, "DCSource DATABASE");
	}
	public void load(String file){
		Zipfile zip = new Zipfile(file);
		if (zip.CanWork()){
			ArrayList<toZipFile> read = zip.dePack();
			list.clear();
			for (int I=0;I<read.size();I++){
				if (read.get(I).getName().split("/").length==1){
					Table add = new Table(read.get(I).getName());
					add.SetSource(new String(read.get(I).getSRC()));
					add(add,true);
				}
		}
		}else{
			list.clear();
		}
	}
	public String toString(){
		String text = "";
		for (int I=0;I<list.size();I++){
			text += list.get(I).getName()+";";
		}
		return "{"+text+"}";
	}
}
